#ifndef CIPODLIBWRAPPER_H_
#define CIPODLIBWRAPPER_H_

//#include <list>
//#include <string>
#include <stdlib.h>

//#include <CIpodLib.h>

/************************************************************************
 * 回调接口
 ************************************************************************/
#ifdef __cplusplus
extern "C"{
#endif

typedef signed char             int8;
typedef signed short            int16;
typedef signed long             int32;
typedef signed long long        int64;
typedef unsigned char           uint8;
typedef unsigned short          uint16;
typedef unsigned long           uint32;
typedef unsigned long long      uint64;

typedef int            ipod_t;

//ipod function mode for IPODMode
#define IPOD_FUN_MODE_MEDIA                 0
#define IPOD_FUN_MODE_CARLIFE               1
#define IPOD_FUN_MODE_CARPLAY               2

//ipod connection mode for IPODConnMode
#define IPOD_CONN_TYPE_UART                 0
#define IPOD_CONN_TYPE_USB_HOST             1
#define IPOD_CONN_TYPE_USB_DEVICE           2
#define IPOD_CONN_TYPE_BLUETOOTH            3
#define IPOD_CONN_TYPE_WiFi                 4

//music id3 max size is 128
#define IPOD_TRACK_NAME_MAX_LEN             128
#define IPOD_GET_LIST_MAX_LEN               300

/**
 *	导航状态类型
 */
typedef enum
{
    ROUTE_GUIDANCE_STATE_NO_ROUTE_SET,     // No Route Set. A route is not set.
    ROUTE_GUIDANCE_STATE_ROUTE_SET,        // Route Set. A route is set.
    ROUTE_GUIDANCE_STATE_ARRIVED,          // Arrived. Arrived at the destination.
    ROUTE_GUIDANCE_STATE_LOADING,          // Loading. Retrieving routing information.
    ROUTE_GUIDANCE_STATE_LOCATING,         // Locating. Location/position not available.
    ROUTE_GUIDANCE_STATE_REROUTING,        // Rerouting. Recalculating the route.
    ROUTE_GUIDANCE_STATE_PROCEED_TO_ROUTE, // Proceed to Route. Vehicle needs to join the route.
} RouteGuidanceState;

/**
 *	导航策略状态类型
 */
typedef enum
{
    MANEUVER_STATE_CONTINUE, // Continue. Continue along this route until next maneuver.
    MANEUVER_STATE_INITIAL,  // Initial. Notification that maneuver is in the near future.
    MANEUVER_STATE_PREPARE,  // Prepare. Notification that maneuver is in the immediate future.
    MANEUVER_STATE_EXECUTE,  // Execute. Vehicle is in maneuver.
} ManeuverState;

/**
 *	显示类型
 */
typedef enum
{
    DISTANCE_DISPLAY_UNITS_KM,
    DISTANCE_DISPLAY_UNITS_MILES,
    DISTANCE_DISPLAY_UNITS_M,
    DISTANCE_DISPLAY_UNITS_YARDS,
    DISTANCE_DISPLAY_UNITS_FT,
} DistanceDisplayUnits;

/**
 *	导航策略转向类型
 */
typedef enum
{
    No_Turn,                           // default value
    Left_Turn,                         // Angle is between -45° and -135°
    Right_Turn,                        // Angle is between 45° and 135°
    Straight_Ahead,                    // Continue straight through the intersection (implies a road name will change)
    Make_A_Uturn,
    Continue,                          // Continue to follow the road the vehicle is currently on
    Enter_Roundabout,
    Exit_Roundabout,
    Off_Ramp,                          // Take the ramp to leave the highway
    On_Ramp,                           // Take the ramp to merge onto the highway
    Arrive_End_Of_Navigation,          // Navigation has completed, but the rest of the journey will need to use another transport method.
    Proceed,                           // Proceed to the beginning of the route
    Arrive_At_Destination,             // Destination has been reached, navigation will end
    Keep_Left,                         // Usually for bifurcations or other smooth maneuvers (compare to Slight Left Turn).
    Keep_Right,                        // Usually for bifurcations or other smooth maneuvers (compare to Slight Right Turn).
    Enter_Ferry,                       // Enter Ferry
    Exit_Ferry,                        // Exit Ferry
    Change_Ferry,                      // Change to a different ferry
    Make_A_Uturn_Proceed,              // Make a U-turn and proceed to the route.
    Roundabout_Make_A_Uturn,           // Use the roundabout to make a U-turn.
    At_the_end_of_the_road_turn_left,  // At the end of the road, turn left
    At_the_end_of_the_road_turn_right, // At the end of the road, turn right
    Highway_Off_Ramp_Left,             // Highway Off Ramp Left. Exit the highway on the left
    Highway_Off_Ramp_Right,            // Exit the highway on the right
    Arrive_At_Destination_Left,        // Destination has been reached; it is on the left and navigation will end.
    Arrive_At_Destination_Right,       // Destination has been reached; it is on the right and navigation will end.
    Make_A_Uturn_when_possible,
    Arrive_End_Of_Directions,          // Navigation has completed, but the rest of the journey will need to use another transport method.
    Roundabout_Exit_1,                 // Exit the roundabout at the 1st street
    Roundabout_Exit_2,                 // Exit the roundabout at the 2nd street
    Roundabout_Exit_3,                 // Exit the roundabout at the 3rd street
    Roundabout_Exit_4,                 // Exit the roundabout at the 4th street
    Roundabout_Exit_5,                 // Exit the roundabout at the 5th street
    Roundabout_Exit_6,                 // Exit the roundabout at the 6th street
    Roundabout_Exit_7,                 // Exit the roundabout at the 6th street
    Roundabout_Exit_8,                 // Exit the roundabout at the 6th street
    Roundabout_Exit_9,                 // Exit the roundabout at the 6th street
    Roundabout_Exit_10,                // Exit the roundabout at the 6th street
    Roundabout_Exit_11,                // Exit the roundabout at the 6th street
    Roundabout_Exit_12,                // Exit the roundabout at the 6th street
    Roundabout_Exit_13,                // Exit the roundabout at the 6th street
    Roundabout_Exit_14,                // Exit the roundabout at the 6th street
    Roundabout_Exit_15,                // Exit the roundabout at the 6th street
    Roundabout_Exit_16,                // Exit the roundabout at the 6th street
    Roundabout_Exit_17,                // Exit the roundabout at the 6th street
    Roundabout_Exit_18,                // Exit the roundabout at the 6th street
    Roundabout_Exit_19,                // Exit the roundabout at the 6th street
    Sharp_Left_Turn,                   // Angle is between -135° and -180°
    Sharp_Right_Turn,                  // Angle is between 135° and 180°.
    Slight_Left_Turn,                  // Turn onto a different road (compare to Keep Left)
    Slight_Right_Turn,                 // Turn onto a different road (compare to Keep Right)
    Change_Highway,                    // Highway to highway change with implied or unknown side of the road.
    Change_Highway_Left,               // Highway to highway change from the left side of the road.
    Change_Highway_Right,              // Highway to highway change from the right side of the road.
} ManeuverType;

/**
 *	左驾车/右驾车
 */
typedef enum
{
    Right,
    Left,
} DrivingSide;

/**
 *	路况判断类型
 */
typedef enum
{
    Single_intersection_with_junction, // Single intersection with junction elements representing roads coming to a common point.
    Roundabout_with_junction,          // Roundabout with junction elements representing roads exiting the roundabout
} JunctionType;

/**
 *	导航信息
 */
typedef struct
{
    uint16               routeGuidanceDisplayComponentID;
    int                  routeGuidanceState;
    int                  maneuverState;
    char                 currentRoadName[128];
    char                 destinationName[128];
    uint64               estimatedTimeOfArrival;
    uint64               timeRemainingToDestination;
    uint32               distanceRemaining;
    char                 distanceRemainingDisplayStr[128];
    int                  distanceRemainingDisplayUnits;
    uint32               distanceToNextManeuver;
    char                 distanceToNextManeuverDisplayStr[128];
    int                  distanceToNextManeuverDisplayUnits;
    uint16               routeGuidanceManeuverCurrentList[64];
    uint16               routeGuidanceManeuverCount;
    bool                 routeGuidanceVisibleInApp;
} RouteGuidanceUpdate;

/**
 *	导航策略信息
 */
typedef struct
{
    uint16               routeGuidanceDisplayComponentID;
    uint16               index;
    char                 maneuverDescription[128];
    int                  maneuverType;
    char                 afterManeuverRoadName[128];
    uint32               distanceBetweenManeuver;
    char                 distanceBetweenManeuverDisplayStr[128];
    int                  distanceBetweenManeuverDisplayUnits;
    int                  drivingSide;
    int                  junctionType;
    int16                junctionElementAngle;
    int16                junctionElementExitAngle;
} RouteGuidanceManeuverUpdate;

/**
 *	电话状态信息
 */
typedef struct {
    char call_state_phone_number[IPOD_TRACK_NAME_MAX_LEN];
    char call_state_network_sent_caller_name[IPOD_TRACK_NAME_MAX_LEN];
    int call_state_status;
    int call_state_direction;
    char unique_call_id[IPOD_TRACK_NAME_MAX_LEN];
}CallStateInformation;

/**
 *	CarPlay连接及设备信息
 */
typedef struct {
    int  wireAvailable;
    int	 wirelessAvailable;
    char USBTransportIdentifier[32];
    char BluetoothTransportIdentifier[32];
}CarPlayAvailInfo;

/**
 *	位置状态信息
 */
typedef union {
    uint8   value;
    struct {
        uint8										: 1;
        uint8 	GlobalPositioningSystemFixData  	: 1;	//GPGGA
        uint8   RecomendedSpecificGPSTransitData   	: 1;	//GPRMC
        uint8   GPSSatellitesInView  				: 1;	//GPGSV
        uint8   VehicleSpeedData					: 1;	//PASCD
        uint8   VehicleGyroData						: 1;	//PAGCD
        uint8   VehicleAccelerometerData			: 1;	//PAACD
        uint8	VehicleHeadingData					: 1;	//GPHDT
    };
} CIAP2LocationType;

/**
 *	连接设备信息
 */
typedef struct
{
    char    USBTransportIdentifier[128];
    char    BluetoothTransportIdentifier[128];
 } CDeviceTransportNotification;

/**
 *	WiFi信息
 */
typedef struct {
    char wifi_ssid[IPOD_TRACK_NAME_MAX_LEN];
    char pass_phrase[IPOD_TRACK_NAME_MAX_LEN];
    uint8 security_type;
    uint8 channel;
}WifiConfigurationInfo;

/**
 *	蓝牙Linkkey信息
 */
typedef struct {
    char link_key[64];
    int link_key_len;
    char mac_address[32];
}OOBLinkKeyInformation;

/**
 * 连接状态变化
 */
typedef void (*onConnectStatusChanged)(ipod_t /*handle*/, int /*connected*/);


/**
 * A2DP状态变化
 */
typedef void (*onA2dpStatusChanged)(ipod_t /*handle*/, bool /*connected*/);

/**
 * 采样率变化
 */
typedef void (*onSampleRateChanged)(ipod_t /*handle*/, int /*rate*/);

/**
 * 歌曲切换
 */
typedef void (*onTrackChanged)(ipod_t /*handle*/, uint32 /*index*/);

/**
 * 播放进度更新， new_position单位秒
 */
typedef void (*onTrackPositionChanged)(ipod_t /*handle*/, uint32 /*position*/);

/**
 * 歌曲时长更新， new_duration单位秒
 */
typedef void (*onTrackDurationChanged)(ipod_t /*handle*/, uint32 /*duration*/);

/**
 * 随机模式状态变化
 * mode: 模式 {@see IPODShuffleMode}
 */
typedef void (*onShuffleModeChanged)(ipod_t /*handle*/, int /*mode*/);

/**
 * 重复模式状态变化
 * mode: 模式 {@see IPODRepeatMode}
 */
typedef void (*onRepeatModeChanged)(ipod_t /*handle*/, int /*mode*/);

/**
 * 播放状态变化
 * state : 模式 {@see IPODPlaybackState}
 */
typedef void (*onPlaybackStateChanged)(ipod_t /*handle*/, int /*state*/);

/**
 * 专辑图片变化
 * path: 专辑图片路径，path为NULL时，表示当前歌曲没有专辑图片
 */
typedef void (*onAlbumArtworkChanged)(ipod_t /*handle*/, const char */*path*/);

/**
 * 媒体库更新进度
 * progress 0 ~ 100
 */
typedef void (*onMediaUpdateProgress)(ipod_t /*handle*/, uint8 /*progress*/);

/**
 * EA数据处理
 */
typedef void (*onEADataReceived)(uint8 */*data*/, uint16 /*len*/);

/**
 * EA Native状态变化
 */
typedef void (*onEANativeStateChanged)(int /*enabled*/);

/**
 * bt spp数据处理
 */
typedef void (*onBtSppSendData)(uint8 */*data*/, uint16 /*len*/);

/**
 * Device Information
 * name: Device Name
 */
typedef void (*onDeviceInformationChanged)(ipod_t /*handle*/, const char */*name*/);

/**
 * Device Information
 * name: Device ID
 */
typedef void (*onDeviceTransportIDChanged )(ipod_t /*handle*/,  CDeviceTransportNotification * /*device_id*/ );

/**
 * Wireless CarPlay available
 * available  1: enable; 0:disable
 */
typedef void (*onWirelessCarPlayUpdate)(ipod_t /*handle*/,  int /*available*/ );

/**
 * Music radio list file path
 */
typedef void (*onFileMusicRadioPath)(ipod_t /*handle*/, const char */*path*/);

/**
 * Music local device list file path
 */
typedef void (*onFileMusicLocalDevicePath)(ipod_t /*handle*/, const char */*path*/);

/**
 * 通话状态信息
 */
typedef void (*onCallStateChanged)(ipod_t /*handle*/, CallStateInformation */*call_state*/);

/**
 * Locatin enable
 * location_anable 1: enable; 0:disable
 * location_type location支持类型，如果不支持location此参数无效
 */
typedef void (*onLocationEnableChanged)(ipod_t /*handle*/,int /*location_anable*/, CIAP2LocationType * /*location_type*/);

/**
 * 导航及策略信息
 */
typedef void (*onRouteGuidChanged)(ipod_t /*handle*/, RouteGuidanceUpdate * /*rgu*/ );
typedef void (*onRouteGuidManeuverChanged)(ipod_t /*handle*/, RouteGuidanceManeuverUpdate * /*rgmu*/);

/**
 * device mac address
 */
typedef void (*onDeviceMacAddress)(ipod_t /*handle*/, const char */*address*/);

/**
 * device link key
 */
typedef void (*onDeviceLinkKey)(ipod_t /*handle*/, OOBLinkKeyInformation */*linkkey*/);

/**
 * CarPlay Availability Information
 */
typedef void (*onCarPlayAvailability)(ipod_t /*handle*/, CarPlayAvailInfo */*carplayavail*/);

/**
 * CarPlay playing list Information
 * index   : current index of playing list
 * available false: not support playing list true: support playing list
 */
typedef void (*onMediaPlayingListChanged)(ipod_t /*handle*/,int /*index*/);

/**
 * 音乐播放器是否支持播放列表
 * available   true: support   false: not support
 */
typedef void (*onPlaybackQueueListAvail)(ipod_t /*handle*/,bool /*available*/);

/**
 * 事件回调结构体
 */
typedef struct {
    onConnectStatusChanged      on_connect_status_changed;
    onA2dpStatusChanged         on_a2dp_status_changed;
    onSampleRateChanged         on_sample_rate_changed;
    onTrackChanged              on_track_changed;
    onTrackPositionChanged      on_track_position_changed;
    onTrackDurationChanged      on_track_duration_changed;
    onShuffleModeChanged        on_shuffle_mode_changed;
    onRepeatModeChanged         on_repeat_mode_changed;
    onPlaybackStateChanged      on_playback_state_changed;
    onAlbumArtworkChanged       on_album_artwark_changed;
    onMediaUpdateProgress       on_media_update_progress;
    onEADataReceived            on_ea_data_received;
    onEANativeStateChanged      on_ea_native_state_changed;
    onDeviceInformationChanged  on_device_information_changed;
    onFileMusicRadioPath        on_file_music_radio_path;
    onFileMusicLocalDevicePath  on_file_music_local_device_path;
    onCallStateChanged          on_call_state_changed;
    onLocationEnableChanged     on_location_enable_changed;
    onDeviceTransportIDChanged  on_device_transportid_changed;
    onWirelessCarPlayUpdate     on_wireless_carplay_update;
    onRouteGuidChanged          on_route_guidance_changed;
    onRouteGuidManeuverChanged  on_route_guidance_maneuver_changed;
    onDeviceMacAddress          on_device_mac_address;
    onDeviceLinkKey             on_device_link_key;
    onCarPlayAvailability       on_carplay_availability;
    onMediaPlayingListChanged   on_media_playing_list_changed;
    onPlaybackQueueListAvail    on_playback_queuelist_available;
} IPODObserver;

/**
 *	蓝牙spp连接状态
 */
typedef enum __BtSppState
{
    ipod_SppState_ReadyNoInitialized = 0X00,
    ipod_SppState_Ready = 0X01,
    ipod_SppState_Connecting = 0X02,
    ipod_SppState_Connected = 0X03,
    ipod_SppState_ErrorSlcAlreadyEstablished = 0X92
} BtSppState;

/**
 *	wifi连接状态
 */
typedef enum __WiFiState
{
    WIFI_NOCONNECT = 0,
    WIFI_CONNECTED = 0,
} WiFiState;

/**
 * 播放状态上报消息
 * track_length     : 歌曲总长度
 * track_postion    : 播放进度
 * status           : 播放状态
 */
typedef struct {
    uint32              track_length;
    uint32              track_position;
    int                 state;
} IPODPlayStatus;

/**
 * 存储记录数据类型
 */
typedef struct _C_IPODMusicSource {
    uint32              index;
    uint64              id;
    char                name[IPOD_TRACK_NAME_MAX_LEN];
} C_IPODMusicSource;

/**
 * 音乐列表结构
 * size             : 列表长度
 * totalnum         : 当前层级下记录总数
 * start            : 开始序号
 * end              : 结束序号
 * level            : 列表所在层级, -1表示不支持层级跳转
 * elements         : 指向IPODMusicSource的指针
 * categorytype     : 当前层级的类型 {@see IPODCategoryType}
 */
typedef struct _C_IPODMusicList {
    uint32                      size;
    uint32                      totalnum;
    uint32                      start;
    uint32                      end;
    int32                       level;
    C_IPODMusicSource           elements[IPOD_GET_LIST_MAX_LEN];
    int                         categorytype;
} C_IPODMusicList;

/************************************************************************
 * CLASS
 * 接口调用成功返回0，失败或不支持返回-1
 ************************************************************************/

//struct IPODObserver; // Warning: 不能使用 extern 修饰

    /**
     * 初始化libipod，例如配置、资源分配，此接口需要在使用时首先调用
     */
extern  int ipodLibInitFun(int mode, int connMode);

    /**
     * 反初始化libipod，资源释放，此接口需要在退出时最后调用
     */
extern  int ipodLibDeinit();

extern  void initialize();

    /**
     * 注册事件回调
     */
extern  void registerObserver(IPODObserver *observer);

    /**
     * 注销事件回调
     */
extern  void unregisterObserver();

    /**
     * 注册车机的蓝牙地址，用于通知蓝牙状态信息， 需要在connect之前调用
     * address: 蓝牙地址，字节数组，大小6
     */
extern  void notifyBtAddress(const uint8 *address);

    /**
     * 通知当前蓝牙连接状态
     */
extern  void notifyBtStatus(bool connected);

    /**
     * 创建链接
     * path：iPod设备文件路径（如"/dev/hidraw0"），选择默认的iPod设备时将path设为NULL
     */
extern  int iap2Connect( ipod_t * handle, const char *path);

    /**
     * 断开链接
     */
extern  int iap2Disconnect(ipod_t * handle);

    /**
     * 更新usb audio状态（仅支持iPhone5及以后的设备）
     */
extern  int notifyUSBAudioStatus(ipod_t handle, bool enabled);

    /**
     * 发送多媒体指令
     * command：命令 {@see IPODMediaCommand}
     */
extern  int sendMediaCommand(ipod_t handle, int command);
extern  int sendMediaCommandDown(ipod_t handle, int command);
extern  int sendMediaCommandUp(ipod_t handle, int command);

    /**
     * 设置正在播放的歌曲进度
     * position：单位秒
     */
extern  int setPlayingTrackPosition(ipod_t handle, uint32 position);

    /**
     * 获取随机模式
     * mode：{@see IPODShuffleMode}
     */
extern  int getShuffleMode(ipod_t handle, int *mode);

    /**
     * 获取重复模式
     * mode：{@see IPODRepeatMode}
     */
extern  int getRepeatMode(ipod_t handle, int *mode);

    /**
     * 获取正在播放的歌曲名称
     */
extern  int getPlayingTrackTitle(ipod_t handle, char *title);

    /**
     * 获取正在播放的歌曲专辑
     */
extern  int getPlayingTrackAlbum(ipod_t handle, char *album);

    /**
     * 获取正在播放的歌曲表演者
     */
extern  int getPlayingTrackArtist(ipod_t handle, char *artist);

    /**
     * 获取正在播放的歌曲专辑图片
     */
extern  int getPlayingTrackAlbumArtwork(ipod_t handle);

    /**
     * 获取正在播放歌曲的播放总时间
     */
extern  int getPlayingTrackDuration(ipod_t handle, int * duration);

    /**
     * 获取播放状态
     */
extern  int getPlayStatus(ipod_t handle, IPODPlayStatus *status);

    /**
     * 获取正在播放的歌曲序号属性
     * index ： 索引
     * count ： 总数
     */
extern  int getPlayingTrackInfo(ipod_t handle, int32 *index, uint32 *count);

    /**
     * 获取正在播放的歌曲章节属性
     * index ： 索引
     * count ： 总数
     */
extern  int getPlayingChapterInfo(ipod_t handle, int32 *index, uint32 *count);

    /**
     * 获取iPod是否支持层级跳转
     */
extern  int isListLevelSupported(ipod_t handle, bool *supported);

    /**
     * 重置列表，回到根目录
     * num：根目录包含item个数
     */
extern  int resetMusicList(ipod_t handle, uint32 *num);

    /**
     * 根据索引号打开音乐文件列表，位于歌曲目录时调用此方法可以播放index指向的音乐文件
     * index：列表中第几个, 当index为-1时表示返回上级列表
     * level：列表层级, 当index为-1时level对应设为-1；当iPod设备不支持层级跳转时level值无效，设为-1；level设为-1时，表示不进行层级跳转，即按顺序显示下一级列表。
     * num  ：最后一级列表包含item个数
     */
extern  int selectMusicList(ipod_t handle, int32 index, int32 level, uint32 *num);

    /**
     * 根据起始位置和读取长度获取音乐列表
     */
extern  int getMusicList_c(ipod_t handle, uint32 startIndex, uint32 readCount, C_IPODMusicList *musicList);

/**
 * 根据索引号打开正在播放列表，位于歌曲目录时调用此方法可以播放index指向的音乐文件
 * index：列表中第几个
 */
extern  int selectMusicPlayingList(ipod_t handle, int32 index);

/**
 * 根据起始位置和读取长度获取正在播放列表
 */
extern  int getMusicPlayingList(ipod_t handle, uint32 startIndex, uint32 readCount, C_IPODMusicList *musicList);

    /**
     * 启动iPod端应用
     */
extern  int launchApp(ipod_t handle, const char *appBundleID);

    /**
     * 发送EA数据
     */
extern  int sendEAData(ipod_t handle, const uint8 *data, uint16 len);

    /**
     * 获取EA Native状态
     */
extern  int getEANativeState(ipod_t handle);

/**
 * 发送Location information
 */
extern int setLocationInformation(ipod_t handle, const char *sentence);

/**
 * 发送wifi information
 */
extern int wifiInformationSharing(WifiConfigurationInfo wifi_info);

/**
 * 发送carplay connection
 */
extern int iap2CarPlayStartSession(ipod_t handle, int type);

/**
 * 发送buletooth oob pair completion information
 */
extern int iap2OOBBTPairingCompletionInformation(ipod_t handle, int resultCode );

/**
 * 发送buletooth pair information
 */
extern int iap2BluetoothPairingAccessoryInformation(ipod_t handle, const char * inPairingDataP192,const char * inPairingDataP256);

/**
 * 发送buletooth pair status
 */
extern int iap2BluetoothPairingStatus(ipod_t handle, int success, const char * cancelReason);

/**
 * 定义蓝牙数据发送函数类型
 */
typedef void (*BtSendData)(int cDataLen , const uint8 * pData);

/**
 * 定义WiFi数据发送函数类型
 */
typedef void (*WiFiDataCallback)( int length, const uint8 * ptr );

/**
 * 注册WiFi数据发送函数
 */
extern void setWiFiDataCallback( WiFiDataCallback callback );

/**
 * 定义WiFi数据接收处理函数
 */
extern int sendWiFiData( ipod_t handle,int cDataLen, const char * pData );

/**
 * 蓝牙RFCOMM数据接收处理函数
 */
extern int ipod_BT_spp_data_pro(ipod_t handle, int cDataLen, const char * pData);

/**
 * 注册蓝牙数据发送函数
 */
extern void ipodRegistBtSppSendData(BtSendData n_bt_spp_send_data);

/**
 *	蓝牙spp连接状态改变通知函数
 */
extern void ipod_bt_spp_state_change(BtSppState state);

#ifdef __cplusplus
}
#endif

#endif /* CIPODLIBWRAPPER_H_ */
